Deprecation, bugfixes and more! | This Week in Rails
https://world.hey.com/this.week.in.rails/deprecation-bugfixes-and-more-99b366d4
deprecate passing nil as model arg instead of raising ArgumentError by cjilbert504 · Pull Request #50931 · rails/rails
ActionViewに関する変更です
form_with というメソッドがあります
キーワード引数 model: のデフォルト値は nil でした
このデフォルト値が最近 false に変更されていました
2023年11月のプルリクエスト Handle nil form_with model argument by cjilbert504 · Pull Request #49943 · rails/rails です
modelがnilの際、場合によっては ActionController::ParameterMissing や ActionController::RoutingError が発生することがあるためです
そこで当時のプルリクエストではmodelがnilの場合に ArgumentError を発生させるようにしています
今回のプルリクエストでは ArgumentError ではなく、非推奨であることを伝える警告メッセージを出すように変更してます
ArgumentError を発生させることは破壊的な変更に当たります
意図的にmodelにnilを渡す実装がされているアプリケーションもあるかもしれないからですね
v7.2 の段階では非推奨の警告を出力しておき、v7.3以降で ArgumentError にする、ということです
Skip CSS when creating APIs. by ruyrocha · Pull Request #50907 · rails/rails
railtiesに関する変更です
APIモードでrails newをしたとき、CSSファイルをつくらないようになりました
Add row_count field to sql.active_record notification by marvin-bitterlich · Pull Request #50887 · rails/rails
ActiveRecordに関する変更です
ActiveRecord::ConnectionAdapters::AbstractAdapter というクラスがあります
これはActiveRecordがさまざまなデータベースシステムをサポートするための抽象化クラスです
このクラスに log メソッドがあります
クエリの実行やトランザクションの開始・終了など、データベースとのやりとりに関する情報をログに記録するために呼び出されます
このメソッドの出力はAPMツール(Datadogなど)にデータを送る際にも利用されます
今回のプルリクエストでは、このメソッドの出力に「クエリで取得したレコードの件数」の情報を追加しています
クエリで取得したレコードの件数をAPMツールで確認できるようになったら便利そうですね
Allow encryption without compression by djmb · Pull Request #50876 · rails/rails
ActiveRecordに関する変更です
ActiveRecord::Encryption::Encryptor というクラスがあります
たとえばActiveRecordを継承したモデルのフィールドを暗号化および復号化する際に使えます
code:rb
class User
encrypts :name, encryptor: ActiveRecord::Encryption::Encryptor.new
end
今回のプルリクエストではこのクラスで暗号化する際に、圧縮するかどうかをオプションで指定できるようになりました
code:rb
class User
encrypts :name, encryptor: ActiveRecord::Encryption::Encryptor.new(compress: false)
end
圧縮を回避したいケースとして次の2点が挙げられています
すでに圧縮済みのケース
暗号化された値のエントロピーに関する情報が漏れないようにしたいケース
参考:
rails commit log流し読み(2024/01/30) - なるようになるブログ
Why and how GitHub encrypts sensitive database columns using ActiveRecord::Encryption - The GitHub Blog